// src/utils/storage.ts


import {LocalStorageKeys} from "@/contants/LocalStorageKeys";

/**
 * 通用的 localStorage 操作工具，基于预定义的 Key 常量
 * 存储格式：{ data: T, expires: number }，其中 expires 是过期时间戳（毫秒）
 */

export const storage = {
  /**
   * 设置带过期时间的数据
   * @param key localStorage key
   * @param value 要存储的数据
   * @param ttl 过期时间（单位：毫秒）
   */
  set: <T>(key: string, value: T ,ttl:number): void => {
    try {
      const now = new Date().getTime(); // 当前时间戳
      const item = {
        data: value,
        expires: now + ttl, // 当前时间 + ttl 毫秒后过期
      };
      localStorage.setItem(key, JSON.stringify(item));
    } catch (error) {
      console.error(`localStorage set error [${key}]:`, error);
    }
  },

  /**
   * 获取数据，如果已过期则删除并返回 null
   * @param key localStorage key
   * @returns 过期返回 null，未过期返回数据，不存在也返回 null
   */
  get: <T = any>(key: string): T | null => {
    try {
      const itemStr  = localStorage.getItem(key);
      if (!itemStr) return null;
      const item = JSON.parse(itemStr);
      const now = new Date().getTime();
      if (now > item.expires) {
        // 已过期，删除
        localStorage.removeItem(key);
        return null;
      }
      return item.data; // 未过期，返回数据
    } catch (error) {
      console.error(`localStorage get error [${key}]:`, error);
      return null;
    }
  },

  // 删除
  remove: (key: string): void => {
    try {
      localStorage.removeItem(key);
    } catch (error) {
      console.error(`localStorage remove error [${key}]:`, error);
    }
  },
};
